﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace конфигуратор
{
    public class РесурсыПрограммы
    {
        public  РесурсыПрограммы()
        {
            AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad;
        }

        List<Type> _типы ;
        public List<Type> ТипыДомена  {get
        {
            if (_типы==null) ЗагрузитьТипы();
            return _типы;
        }} 

        public void ЗагрузитьТипы()
        {
            _типы = new List<Type>();
            var ass = AppDomain.CurrentDomain.GetAssemblies();
                foreach ( var a in ass )
                {
                    _типы.AddRange( a.GetExportedTypes() );
                } 
        } 
        
        void CurrentDomain_AssemblyLoad ( object sender, AssemblyLoadEventArgs args )
        {
            _типы.AddRange(args.LoadedAssembly.GetTypes());
        }

        public List<Type> ТипыСборки( Assembly сборка)
        {

            return сборка.GetExportedTypes().ToList();
            //return ТипыДомена.Where(t => t.Assembly == сборка).ToList();
        }
    }
}
